package com.giscloud.amp.entity;

import lombok.Data;
import lombok.ToString;
import lombok.extern.log4j.Log4j;

import java.util.List;

/**
 * @author gxd
 * @date 2018/10/27
 * 数据权限、参考guns实现
 * 2018年10月27日  增强查询参数
 */
@Data
@Log4j
@ToString
public class DataScope {

    /**
     * 用户登录id
     */
    private Long userId;
    /**
     * 限制范围的字段名称
     */
    private String scopeName = "staff_id";

    /**
     * 具体的数据范围
     */
    private List<Long> ids;

    /**
     * 规则，like,in ,not int .....
     */
    private String rule;


    //private static int IN_SIZE = 1000;
    //
    //private Long userId;
    //
    ///**
    // * 默认左连接
    // */
    //private String tableRel = "left join ";
    ///**
    // * 关联table名称
    // */
    //private String salveTableName;
    ///**
    // * 关联table别名
    // */
    //private String salveTableOtherName;
    ///**
    // * 关联table字段
    // */
    //private String salveTableField;
    //
    ///**
    // * 主表别名
    // */
    //private String masterTableOtherName;
    ///**
    // * 默认主表关联字段
    // */
    //private String masterTableField = "id";
    //
    ///**
    // * 查找用户ID
    // */
    //private String searchUserField;
    //
    ///**
    // * 获取相关的关联SQL
    // *
    // * @return
    // */
    //public String getSqlRel() {
    //    StringBuilder sb = new StringBuilder();
    //    //增加一个空格，防止与主表靠得太近
    //    sb.append(" ");
    //    //sb.append(this.getMasterTableOtherName());
    //    sb.append(" ");
    //    sb.append(this.getTableRel());
    //    sb.append(" ");
    //    sb.append(this.getSalveTableName()).append("  ").append(this.getSalveTableOtherName());
    //    sb.append(" on ").append(this.getSalveTableOtherName()).append(".").append(this.getSalveTableField()).append("=").append(this.getMasterTableOtherName()).append(".").append(this.getMasterTableField());
    //    return sb.toString();
    //}
    //
    //public  String getCondictionSqlIn(List userList) {
    //    StringBuilder sb = new StringBuilder();
    //    sb.append(" and ");
    //    sb.append(this.buildLogicIn(this.getSalveTableOtherName() + "." + this.getSearchUserField(), userList));
    //    return sb.toString();
    //}
    //
    //public  String getCondictionSqlEq(Object userId) {
    //
    //    StringBuilder sb = new StringBuilder();
    //    sb.append(" and ");
    //    sb.append(this.getSalveTableOtherName() + "." + this.getSearchUserField()).append("=").append(userId);
    //    return sb.toString();
    //}
    //
    ///**
    // * 构造in语句，若valueList超过1000时，该函数会自动拆分成多个in语句
    // *
    // * @param item
    // * @param valueList
    // * @return item in (valueList)
    // */
    //public String buildLogicIn(String item, List valueList) {
    //    int n = (valueList.size() - 1) / IN_SIZE;
    //    StringBuffer rtnStr = new StringBuffer();
    //    Object obj = valueList.get(0);
    //    boolean isString = false;
    //    if (obj instanceof Character || obj instanceof String) {
    //        isString = true;
    //    }
    //    String tmpStr;
    //    for (int i = 0; i <= n; i++) {
    //        int size = i == n ? valueList.size() : (i + 1) * IN_SIZE;
    //        if (i > 0) {
    //            rtnStr.append(" or ");
    //        }
    //        rtnStr.append(item + " in (");
    //        if (isString) {
    //            StringBuffer tmpBuf = new StringBuffer();
    //            for (int j = i * IN_SIZE; j < size; j++) {
    //                tmpStr = valueList.get(j).toString().replaceAll("'", "''");
    //                tmpBuf.append(",'").append(tmpStr).append("'");
    //            }
    //            tmpStr = tmpBuf.substring(1);
    //        } else {
    //            tmpStr = valueList.subList(i * IN_SIZE, size).toString();
    //            tmpStr = tmpStr.substring(1, tmpStr.length() - 1);
    //        }
    //        rtnStr.append(tmpStr);
    //        rtnStr.append(")");
    //    }
    //    if (n > 0) {
    //        return "(" + rtnStr.toString() + ")";
    //    } else {
    //        return rtnStr.toString();
    //    }
    //}
}
